دسته بندی ها
19:21 1398/07/07

حذف کامل یک رکورد در جدول ریلیشن شده

مشخصات سوال کننده :
کاربر : sunboy     امتیاز کاربر : 14     رتبه کاربر : 49
دسته بندی : Asp.net Core Sql Server MySql

به این سوال امتیاز بدهید    1
تعداد بازدید این سوال : 3241
هوش مصنوعی

پاسخ هوش مصنوعی

برای حذف یک رکورد از جدول که به خودش ریلیشن شده است، ابتدا باید مطمین شوید که هیچ رکورد وابسته ای به آن رکورد وجود ندارد. در واقع، اگر یک رکورد دارای ساب منوها باشد، ابتدا باید آن ساب منوها را حذف کنید و سپس رکورد اصلی را حذف کنید.

شما می توانید از یک کویری مشابه زیر استفاده کنید:

-- فرض بر این است که 'your_table' نام جدول و 'id' نام ستون ID است.
-- ابتدا ساب منوها را حذف کنید
DELETE FROM your_table WHERE parent = :id_to_delete;

-- سپس رکورد اصلی را حذف کنید
DELETE FROM your_table WHERE id = :id_to_delete;

در اینجا `:id_to_delete` باید با مقدار ID رکوردی که می خواهید حذف کنید، جایگزین شود. با اجرای اولین دستور، تمام ساب منوهای مربوط به آن رکورد حذف خواهند شد و با اجرای دومین دستور، رکورد اصلی نیز حذف خواهد شد.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : hamdola 23:24 1398/07/26

توضیحاتتون خیلی کمه

بهتر بود کدهاتون رو هم قرار می دادید یا از جدولتون عکسی میذاشتید. منظورتون از جدولی که به خودش ریلیشن شده چی هست دقیقا؟

لطفا سوالتون رو ویرایش کنید و توضیحات کامل تری رو ارائه بدید براش 

به این پاسخ امتیاز بدهید    1
امتیاز: 121 رتبه: 12
پاسخ دهنده : hamdola 23:24 1398/07/26

آیا ستون Parent به صورت یک کلید خارجی ثبت شده؟

اگر یک کلید خارجی هست خب مطمنا ممکنه نشه اطلاعات رو حذف کرد. دلیل هم واضحه. اون ردیفی که شما قصد دارید حذفش کنید یک کلید اصلی داره که این کلید احتمالا در جایی به عنوان کلید خارجی استفاده شده. و اگر این ردیف رو حذف کنید یکپارچگی دیتابیس از بین میره. یعنی بعد از حذف شما دارای یک کلید خارجی میشید که کلید اصلیش حذف شده و این توی دیتابیس امکان پذیر نیست.

شما یا باید ستونی که کلید خارجی هست رو به صورت ساده تعریف کنید نه کلید خارجی یا اینکه کلید های خارجی که تعریف می کنید از نوعی تعریف کنید که بتونه مقدار null هم بپذیره. (این لینک رو ببینید)

به این پاسخ امتیاز بدهید    0
امتیاز: 121 رتبه: 12
پاسخ دهنده : sunboy 23:24 1398/07/26

ممنون از پاسختون در سوال کامل مطرح کردم به هیچ جدول دیگری ریلیشن نشده به خود جدول ریلیشن شده و مفدار null هم می گیره در واقع اگر parent مقدار null باشه منو اصلی است ولی اگر مقدار Identity جدول رو بگیر مثلا 1 میشه زیرمنو منویی که آی دی 1 داره .

به این پاسخ امتیاز بدهید    0
امتیاز: 14 رتبه: 49
پاسخ دهنده : hosein_azm 23:24 1398/07/26

اگه قصدت اینه ک اطلاعات رو توی فرم نمایش ندی   میتونی از حذف منطقی استفاده کنی - یعنی یه پروپرتی به جدولت اضافه کن مثلا به نام delete   . اگه مقدار delete  برابر true  بود ک اونوخت اطلاعات رو توی فرم نمایش نده - با این روش دگ نیازی نیست رکوردی که شامل ی کلید خارجی هست رو حذف کنی - 

به این پاسخ امتیاز بدهید    2
امتیاز: 46 رتبه: 18
پاسخ دهنده : sunboy 23:24 1398/07/26

ممنون آقا حسین عزیز این مورد رو پیاده سازی کردم می خواستم ببینم راهکاری هست برای حذف کامل یا خیر

به این پاسخ امتیاز بدهید    0
امتیاز: 14 رتبه: 49
پاسخ دهنده : mohammad-i 23:24 1398/07/26

با توجه به توضیحات شما متوجه شدم که فیلد ID یونیک نیست.

بهترین راه اینه که برای هر رکورد یک فیلد یونیک بزارید.

به این پاسخ امتیاز بدهید    0
امتیاز: 260 رتبه: 7
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود